This is Kara’s first pass at looking at the Sleep data (with data from 2019-01-24).
Demographics
A couple of things to note here: A substantial majority of participants in Thailand were female, and this also appears to be true in China and Vanuatu (where an unusual number of participants are missing gender/sex info).
Questions 1-23
1. Where do you usually sleep at night? (slep_ordn01)

2. What do you usually sleep on at night? (slep_ordn02)

3. Does anyone else sleep in the same bed (or mat, hammock, etc.) with you? (slep_ordn03)

4. If yes, who sleeps with you in the bed? Please circle the person(s) from the list (slep_ordn04)

5. Besides anyone who shares the bed with you, does someone else sleep in the same room with you? (slep_ordn05)

6. If yes, who else sleeps in the same room with you? Please circle the person(s) from the list (slep_ordn06)

7. What does your family use to see at night? (slep_ordn07)

8. Do you usually take naps? (slep_ordn08)

9. If so, how often do you rest or nap? (slep_ordn09)


10. When do you typically fall asleep every night and wake up every night? (slep_ordn10)



11. Does that vary a lot from night to night? (slep_ordn11)


12a. RA judgment for hours slept (slep_ordn12a, derived from slep_ordn12)

13. What do you think is the most important role of sleep for you? (slep_ordn13)

14. Do you look forward to dreaming? (slep_ordn14)


15. Are dreams an important source of spiritual insight for you? (slep_ordn15)


16. Do you regard sleep as a doorway into another way of being? (slep_ordn16)

17. Do special spiritual things happen during the night for you? (slep_ordn17)


18. Do you wake up to pray in the middle of the night? (slep_ordn18)


19a. RA judgment for time spent in prayer (slep_ordn19a, derived from slep_ordn19)

20. If you do, do you go back to sleep? (slep_ordn20)


21. Do you intentionally sleep in any specific positions that have spiritual or health consequences? (slep_ordn21)


22. Do you interact with God or with spirits in the middle of the night? (slep_ordn22)


23. What wakes you up most at night? (slep_ordn23)

“Edge” survey
Total score (slep_edge_total)


Individual questions
The “edge” survey consisted of 20 questions, labeled as follows (order may have varied across versions?):
slep_edge01: 11. I’ve felt an evil presence in the room, but could not see, hear, touch or smell anyone there.
slep_edge02: 12. I’ve heard someone calling my name
slep_edge03: 13. I’ve seen a blurry human figure in the room.
slep_edge04: 14.I’ve had the sense of an invisible presence watching me.
slep_edge05: 15. I’ve heard the voice of a person I could not identify.
slep_edge06: 16. I’ve heard human speech which spoke in a garbled, unclear way.
slep_edge07: 17. I’ve seen the image of a face.
slep_edge08: 18. I’ve heard the voice of someone familiar to me.
slep_edge09: 19. I’ve see things or figures floating in my room.
slep_edge10: 20. I’ve felt the presence of an intruder in my bedroom, though I did not actually see, hear, touch or smell anyone
slep_edge11: 1. I’ve clearly seen people in my room
slep_edge12: 2. I’ve heard non-speech sound, such as laughter, music or other noises
slep_edge13: 3. I’ve seen things in my room other than people
slep_edge14: 4. I’ve had the feeling of a presence in the room which I felt was aware of me too, but I could not actually see, hear, touch or smell them
slep_edge15: 5. I’ve heard God (or a spirit) speak
slep_edge16: 6. I’ve heard God (or a spirit) singing to me.
slep_edge17: 7. I’ve seen an angel (or a spirit)
slep_edge18: 8. I’ve seen a ghost
slep_edge19: 9. I’ve felt the presence of God (or a spirit)
slep_edge20: 10. I have woken up and been unable to move.
attributes are not identical across measure variables;
they will be dropped

attributes are not identical across measure variables;
they will be dropped

LS0tCnRpdGxlOiAiU2xlZXAgKEtXIGZpcnN0IHBhc3MpIgpzdWJ0aXRsZTogIkxhc3QgdXBkYXRlZDogMjAxOS0wMS0yNSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKVGhpcyBpcyBLYXJhJ3MgZmlyc3QgcGFzcyBhdCBsb29raW5nIGF0IHRoZSBTbGVlcCBkYXRhICh3aXRoIGRhdGEgZnJvbSAyMDE5LTAxLTI0KS4KCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsYW5nY29nKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShsdWJyaWRhdGUpCgp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpgYGB7cn0KZF9yYXcgPC0gcmVhZF9jc3YoIi4uL0NPTVBMRVRFX3VzZSBmb3IgYW5hbHlzaXNfU2xlZXBfSmFuLjI0LjIwMTkuY3N2IikKYGBgCgpgYGB7cn0KZDAgPC0gZF9yYXcgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc2xlcF9vcmRuMTEsIHNsZXBfb3JkbjEyYSwgc2xlcF9vcmRuMTlhLCBzbGVwX2VkZ2VfdG90YWwsIAogICAgICAgICAgICAgICAgIHNsZXBfZGVtb19hZ2UsIHNsZXBfZGVtb19zZXMsIHNsZXBfZGVtb19ob3dyKSwgCiAgICAgICAgICAgIGZ1bnMoYXMubnVtZXJpYykpICU+JQogIG11dGF0ZV9hdCh2YXJzKHNsZXBfb3JkbjAzLCBzbGVwX29yZG4wNSwgc2xlcF9vcmRuMDgsIHNsZXBfb3JkbjE2KSwKICAgICAgICAgICAgZnVucyhyZWNvZGVfZmFjdG9yKC4sICIwIiA9ICJubyIsICIxIiA9ICJ5ZXMiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHNsZXBfb3JkbjA0LCBzbGVwX29yZG4wNiksCiAgICAgICAgICAgIGZ1bnMocmVjb2RlX2ZhY3RvciguLCAiMCIgPSAibm9ib2R5IiwgIjEiID0gInNwb3VzZSIsICIyIiA9ICJzaXN0ZXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJicm90aGVyIiwgIjQiID0gImRhdWdodGVyIiwgIjUiID0gInNvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNiIgPSAibW90aGVyIiwgIjciID0gImZhdGhlciIsICI4IiA9ICJncmFuZHBhcmVudCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjkiID0gImdyYW5kY2hpbGQiLCAiMTAiID0gIm90aGVyIHJlbGF0aXZlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTEiID0gIm5vbi1yZWxhdGl2ZSIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc2xlcF9vcmRuMTFfd29ybGRvZnNwaXJpdHMsIHNsZXBfb3JkbjEzX2RlZXBzZWxmLAogICAgICAgICAgICAgICAgIHNsZXBfb3JkbjEzX21pbmRvZmYsIHNsZXBfb3JkbjEzX3JlcGxlbmlzaCwKICAgICAgICAgICAgICAgICBzbGVwX29yZG4yM19QaHlzaW9sb2dpY2FsLCBzbGVwX29yZG4yM19Qc3ljaG9sb2dpY2FsLAogICAgICAgICAgICAgICAgIHNsZXBfb3JkbjIzX0RyZWFtcywgc2xlcF9vcmRuMjNfU291bmQsCiAgICAgICAgICAgICAgICAgc2xlcF9vcmRuMjNfc3VwZXJuYXR1cmFscHJheWVyKSwKICAgICAgICAgICAgZnVucyhmYWN0b3IoLiwKICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiXFwuIiwgIjEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygibm8iLCAieWVzIikpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc2xlcF9vcmRuMTUsIHNsZXBfb3JkbjE3LCBzbGVwX29yZG4xOCwgc2xlcF9vcmRuMjA6c2xlcF9vcmRuMjIpLAogICAgICAgICAgICBmdW5zKHJlY29kZV9mYWN0b3IoLiwgIjAiID0gIm5ldmVyIiwgIjEiID0gInJhcmVseSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gInNvbWV0aW1lcyIsICIzIiA9ICJvZnRlbiIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoInNsZXBfZWRnZSIpLCAtc2xlcF9lZGdlX3RvdGFsKSwKICAgICAgICAgICAgZnVucyhyZWNvZGVfZmFjdG9yKC4sICIwIiA9ICJuZXZlciIsICIxIiA9ICJyYXJlbHkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJvY2Nhc2lvbmFsbHkiLCAiMyIgPSAiZnJlcXVlbnRseSIpKSkgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjAxID0gcmVjb2RlX2ZhY3RvcihzbGVwX29yZG4wMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAib3duIGJlZHJvb20iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJiZWRyb29tIHNoYXJlZCB3aXRoIG90aGVycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiY29tbW9uIHJvb20gKGxpdmluZyBwbHVzIHNsZWVwaW5nKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgPSAicG9yY2gvb3V0c2lkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSIgPSAibm90IGluIGhvbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjYiID0gInZhcmlhYmxlIiksCiAgICAgICAgIHNsZXBfb3JkbjAyID0gcmVjb2RlX2ZhY3RvcihzbGVwX29yZG4wMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJiZWQiLCAiMiIgPSAic29mYSwgZGl2YW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJtYXQsIGdyb3VuZCIsICI0IiA9ICJoYW1tb2NrIiksCiAgICAgICAgIHNsZXBfb3JkbjA3ID0gcmVjb2RlX2ZhY3RvcihzbGVwX29yZG4wNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJub3RoaW5nLCBqdXN0IHRoZSBtb29uIGFuZCBzdGFycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAibGlnaHQgZnJvbSB0aGUgY29va2luZyBmaXJlIG9yIGhlYXJ0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiY2FuZGxlcyBvciBzdHJhdyB0b3JjaGVzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAib2lsIG9yIGtlcm9zZW5lIGxhbXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gImJhdHRlcnktZHJpdmVuIGxhbXAgb3IgZmxhc2hsaWdodCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gImVsZWN0cmljIGxpZ2h0IiksCiAgICAgICAgIHNsZXBfb3JkbjA5ID0gcmVjb2RlX2ZhY3RvcihzbGVwX29yZG4wOSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJOQSAobmV2ZXIpIiwgIjEiID0gInJhcmVseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAic29tZXRpbWVzICgxLTIgdGltZXMgYSB3ZWVrKSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gInVzdWFsbHkgYnV0IG5vdCBldmVyeWRheSAoMy02IHRpbWVzIGEgd2VlaykiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICJldmVyeSBkYXkiKSwKICAgICAgICAgc2xlcF9vcmRuMTQgPSByZWNvZGVfZmFjdG9yKHNsZXBfb3JkbjE0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIm5vIiwgIjEiID0gImEgbGl0dGxlIiwgIjIiID0gImEgbG90IiksCiAgICAgICAgIHNsZXBfY3RyeSA9IHJlY29kZV9mYWN0b3Ioc2xlcF9jdHJ5LCAiMSIgPSAiVVMiLCAiNCIgPSAiR2hhbmEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiVGhhaWxhbmQiLCAiMiIgPSAiQ2hpbmEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNSIgPSAiVmFudWF0dSIpLAogICAgICAgICBzbGVwX2RlbW9fc2V4ID0gcmVjb2RlX2ZhY3RvcihzbGVwX2RlbW9fc2V4LCAiMSIgPSAibSIsICIyIiA9ICJmIiksCiAgICAgICAgIHNsZXBfZGVtb191YnJ1ID0gcmVjb2RlX2ZhY3RvcihzbGVwX2RlbW9fdWJydSwgIjEiID0gInVyYmFuIiwgIjIiID0gInJ1cmFsIiksCiAgICAgICAgIHNsZXBfZGVtb19hZmZyID0gcmVjb2RlX2ZhY3RvcihzbGVwX2RlbW9fYWZmciwgIjEiID0gIm5vIiwgIjAiID0gInllcyIpLAogICAgICAgICBzbGVwX2RlbW9fdHVuZyA9IHJlY29kZV9mYWN0b3Ioc2xlcF9kZW1vX3R1bmcsICIwIiA9ICJubyIsICIxIiA9ICJ5ZXMiKSkgJT4lCiAgc2VsZWN0KC1jKHNsZXBfZW50cjpzbGVwX2JhdGMsIHNsZXBfZmlsZTpzbGVwX3dob2MpKSAlPiUKICBkaXN0aW5jdCgpCmBgYAoKYGBge3J9CiMgZGVhbCB3aXRoIHNsZWVwaW5nICYgd2FraW5nIHRpbWVzCiMgbm90IHF1aXRlIHBlcmZlY3QhIQpkMSA8LSBkMCAlPiUKICBtdXRhdGVfYXQodmFycyhgc2xlcF9vcmRuMTBhIzFfMV8xYCwgYHNsZXBfb3JkbjEwYSMxXzJfMWApLAogICAgICAgICAgICBmdW5zKGdzdWIoIl4wXFw6IiwgIjEyXFw6IiwgLikpKSAlPiUKICBtdXRhdGUoc2xlcF9kYXRlc2xlZXAgPSBpZmVsc2UoYHNsZXBfb3JkbjEwYSMyXzFgID09ICJQTSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIodG9kYXkoKSksIGFzLmNoYXJhY3Rlcih0b2RheSgpICsgMSkpLAogICAgICAgICBzbGVwX2RhdGV3YWtlID0gYXMuY2hhcmFjdGVyKHRvZGF5KCkgKyAxKSwKICAgICAgICAgc2xlcF9kYXRldGltZXNsZWVwID0gcGFzdGUoc2xlcF9kYXRlc2xlZXAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgc2xlcF9vcmRuMTBhIzFfMV8xYCwgYHNsZXBfb3JkbjEwYSMyXzFgKSwKICAgICAgICAgc2xlcF9kYXRldGltZXdha2UgPSBwYXN0ZShzbGVwX2RhdGV3YWtlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBzbGVwX29yZG4xMGEjMV8yXzFgLCBgc2xlcF9vcmRuMTBhIzJfMmApKSAlPiUKICBtdXRhdGVfYXQodmFycyhzbGVwX2RhdGV0aW1lc2xlZXAsIHNsZXBfZGF0ZXRpbWV3YWtlKSwKICAgICAgICAgICAgZnVucyhpZmVsc2UoZ3JlcGwoIk1EIiwgLiksIE5BLCAuKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHNsZXBfZGF0ZXRpbWVzbGVlcCwgc2xlcF9kYXRldGltZXdha2UpLAogICAgICAgICAgICBmdW5zKHBhcnNlX2RhdGV0aW1lKC4sIGZvcm1hdCA9ICIlWS0lbS0lZCAlSTolTSAlcCIpKSkgJT4lCiAgbXV0YXRlKHNsZXBfaW50ZXJ2YWwgPSBpbnRlcnZhbChzbGVwX2RhdGV0aW1lc2xlZXAsIHNsZXBfZGF0ZXRpbWV3YWtlKSwKICAgICAgICAgc2xlcF9kdXJhdGlvbiA9IGFzLmR1cmF0aW9uKHNsZXBfaW50ZXJ2YWwpLAogICAgICAgICBzbGVwX2R1cmF0aW9uX251bSA9IGFzLm51bWVyaWMoc2xlcF9kdXJhdGlvbiwgImhvdXJzIikpCmBgYAoKYGBge3J9CmQgPC0gZDEKYGBgCgpgYGB7cn0KIyBjaGVjayBjb3VudHJ5IGNvZGVzCmQgJT4lIAogIGRpc3RpbmN0KHNsZXBfY3RyeSwgc2xlcF9zdWJqKSAlPiUKICBtdXRhdGUoc2xlcF9zdWJqX2ZpcnN0ZGlnID0gc3Vic3RyKHNsZXBfc3ViaiwgMSwgMSkpICU+JQogIGNvdW50KHNsZXBfY3RyeSwgc2xlcF9zdWJqX2ZpcnN0ZGlnKQpgYGAKCgoKIyBEZW1vZ3JhcGhpY3MKCmBgYHtyLCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChzbGVwX2N0cnksIHNsZXBfc3ViaikgJT4lCiAgY291bnQoc2xlcF9jdHJ5KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChzbGVwX2N0cnksIHNsZXBfc3Viaiwgc2xlcF9kZW1vX3NleCkgJT4lCiAgZ3JvdXBfYnkoc2xlcF9jdHJ5KSAlPiUKICBjb3VudChzbGVwX2RlbW9fc2V4KSAlPiUKICBtdXRhdGUocHJvcCA9IHJvdW5kKG4vc3VtKG4pLCAyKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtbikgJT4lCiAgc3ByZWFkKHNsZXBfZGVtb19zZXgsIHByb3ApCmBgYAoKQSBjb3VwbGUgb2YgdGhpbmdzIHRvIG5vdGUgaGVyZTogQSBzdWJzdGFudGlhbCBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgaW4gVGhhaWxhbmQgd2VyZSBmZW1hbGUsIGFuZCB0aGlzIGFsc28gYXBwZWFycyB0byBiZSB0cnVlIGluIENoaW5hIGFuZCBWYW51YXR1ICh3aGVyZSBhbiB1bnVzdWFsIG51bWJlciBvZiBwYXJ0aWNpcGFudHMgYXJlIG1pc3NpbmcgZ2VuZGVyL3NleCBpbmZvKS4KCmBgYHtyLCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZGlzdGluY3Qoc2xlcF9jdHJ5LCBzbGVwX3N1YmosIHNsZXBfZGVtb19hZ2UpICU+JQogIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzbGVwX2RlbW9fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtZWFuID0gbWVhbihzbGVwX2RlbW9fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzZCA9IHNkKHNsZXBfZGVtb19hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1pbiA9IG1pbihzbGVwX2RlbW9fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtYXggPSBtYXgoc2xlcF9kZW1vX2FnZSwgbmEucm0gPSBUKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMobWVkaWFuLCBtZWFuLCBzZCwgbWluLCBtYXgpLCBmdW5zKHJvdW5kKC4sIDIpKSkKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIFF1ZXN0aW9ucyAxLTIzCgojIyAxLiBXaGVyZSBkbyB5b3UgdXN1YWxseSBzbGVlcCBhdCBuaWdodD8gKGBzbGVwX29yZG4wMWApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjAxID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMDEpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjAxKSksCiAgICAgICAgIHNsZXBfb3JkbjAxID0gZmFjdG9yKHNsZXBfb3JkbjAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJvd24gYmVkcm9vbSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWRyb29tIHNoYXJlZCB3aXRoIG90aGVycyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tb24gcm9vbSAobGl2aW5nIHBsdXMgc2xlZXBpbmcpIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcmNoL291dHNpZGUiLCAibm90IGluIGhvbWUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFyaWFibGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4wMSkgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMDEsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMDEsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIxLiBXaGVyZSBkbyB5b3UgdXN1YWxseSBzbGVlcCBhdCBuaWdodD8gKGBzbGVwX29yZG4wMWApIiwgCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKCiMjIDIuIFdoYXQgZG8geW91IHVzdWFsbHkgc2xlZXAgb24gYXQgbmlnaHQ/IChgc2xlcF9vcmRuMDJgKQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIG11dGF0ZShzbGVwX29yZG4wMiA9IGNhc2Vfd2hlbihncmVwbCgiLCIsIHNsZXBfb3JkbjAyKSB+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IGFzLmNoYXJhY3RlcihzbGVwX29yZG4wMikpLAogICAgICAgICBzbGVwX29yZG4wMiA9IGZhY3RvcihzbGVwX29yZG4wMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiYmVkIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvZmEsIGRpdmFuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hdCwgZ3JvdW5kIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhhbW1vY2siLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4wMikgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMDIsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMDIsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIyLiBXaGF0IGRvIHlvdSB1c3VhbGx5IHNsZWVwIG9uIGF0IG5pZ2h0PyAoYHNsZXBfb3JkbjAyYCkiLCAKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgoKIyMgMy4gRG9lcyBhbnlvbmUgZWxzZSBzbGVlcCBpbiB0aGUgc2FtZSBiZWQgKG9yIG1hdCwgaGFtbW9jaywgZXRjLikgd2l0aCB5b3U/IChgc2xlcF9vcmRuMDNgKQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIG11dGF0ZShzbGVwX29yZG4wMyA9IGNhc2Vfd2hlbihncmVwbCgiLCIsIHNsZXBfb3JkbjAzKSB+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjAzKSksCiAgICAgICAgIHNsZXBfb3JkbjAzID0gZmFjdG9yKHNsZXBfb3JkbjAzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJ5ZXMiLCAibm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIikpKSAlPiUKICBjb3VudChzbGVwX2N0cnksIHNsZXBfb3JkbjAzKSAlPiUKICBjb21wbGV0ZShzbGVwX29yZG4wMywgbmVzdGluZyhzbGVwX2N0cnkpLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX29yZG4wMywgeSA9IHByb3AsIGZpbGwgPSBzbGVwX2N0cnkpKSArCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhzbGVwX2N0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjMuIERvZXMgYW55b25lIGVsc2Ugc2xlZXAgaW4gdGhlIHNhbWUgYmVkIChvciBtYXQsIGhhbW1vY2ssIGV0Yy4pIHdpdGggeW91P1xuKGBzbGVwX29yZG4wM2ApIiwgCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKCiMjIDQuIElmIHllcywgd2hvIHNsZWVwcyB3aXRoIHlvdSBpbiB0aGUgYmVkPyBQbGVhc2UgY2lyY2xlIHRoZSBwZXJzb24ocykgZnJvbSB0aGUgbGlzdCAoYHNsZXBfb3JkbjA0YCkKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC41LCBpbmNsdWRlID0gVH0KZCAlPiUKICBtdXRhdGUoc2xlcF9vcmRuMDQgPSBjYXNlX3doZW4oZ3JlcGwoIiwiLCBzbGVwX29yZG4wNCkgfgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IGFzLmNoYXJhY3RlcihzbGVwX29yZG4wNCkpLAogICAgICAgICBzbGVwX29yZG4wNCA9IGZhY3RvcihzbGVwX29yZG4wNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygibm9ib2R5IiwgInNwb3VzZSIsICJzaXN0ZXIiLCAiYnJvdGhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdWdodGVyIiwgInNvbiIsICJtb3RoZXIiLCAiZmF0aGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3JhbmRwYXJlbnQiLCAiZ3JhbmRjaGlsZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdGhlciByZWxhdGl2ZSIsICJub24tcmVsYXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIikpKSAlPiUKICBjb3VudChzbGVwX2N0cnksIHNsZXBfb3JkbjA0KSAlPiUKICBjb21wbGV0ZShzbGVwX29yZG4wNCwgbmVzdGluZyhzbGVwX2N0cnkpLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX29yZG4wNCwgeSA9IHByb3AsIGZpbGwgPSBzbGVwX2N0cnkpKSArCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhzbGVwX2N0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjQuIElmIHllcywgd2hvIHNsZWVwcyB3aXRoIHlvdSBpbiB0aGUgYmVkPyBQbGVhc2UgY2lyY2xlIHRoZSBwZXJzb24ocykgZnJvbSB0aGUgbGlzdCAoYHNsZXBfb3JkbjA0YCkiLCAKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgoKIyMgNS4gQmVzaWRlcyBhbnlvbmUgd2hvIHNoYXJlcyB0aGUgYmVkIHdpdGggeW91LCBkb2VzIHNvbWVvbmUgZWxzZSBzbGVlcCBpbiB0aGUgc2FtZSByb29tIHdpdGggeW91PyAoYHNsZXBfb3JkbjA1YCkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBtdXRhdGUoc2xlcF9vcmRuMDUgPSBjYXNlX3doZW4oZ3JlcGwoIiwiLCBzbGVwX29yZG4wNSkgfiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoc2xlcF9vcmRuMDUpKSwKICAgICAgICAgc2xlcF9vcmRuMDUgPSBmYWN0b3Ioc2xlcF9vcmRuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm5vIiwgInllcyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIikpKSAlPiUKICBjb3VudChzbGVwX2N0cnksIHNsZXBfb3JkbjA1KSAlPiUKICBjb21wbGV0ZShzbGVwX29yZG4wNSwgbmVzdGluZyhzbGVwX2N0cnkpLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX29yZG4wNSwgeSA9IHByb3AsIGZpbGwgPSBzbGVwX2N0cnkpKSArCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhzbGVwX2N0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjUuIEJlc2lkZXMgYW55b25lIHdobyBzaGFyZXMgdGhlIGJlZCB3aXRoIHlvdSwgZG9lcyBzb21lb25lIGVsc2Ugc2xlZXAgaW4gdGhlIHNhbWVcbnJvb20gd2l0aCB5b3U/IChgc2xlcF9vcmRuMDVgKSIsIAogICAgICAgeCA9ICJSZXNwb25zZSIsIHkgPSAiUHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMiKQpgYGAKCgojIyA2LiBJZiB5ZXMsIHdobyBlbHNlIHNsZWVwcyBpbiB0aGUgc2FtZSByb29tIHdpdGggeW91PyBQbGVhc2UgY2lyY2xlIHRoZSBwZXJzb24ocykgZnJvbSB0aGUgbGlzdCAoYHNsZXBfb3JkbjA2YCkKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC41LCBpbmNsdWRlID0gVH0KZCAlPiUKICBtdXRhdGUoc2xlcF9vcmRuMDYgPSBjYXNlX3doZW4oZ3JlcGwoIiwiLCBzbGVwX29yZG4wNikgfgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IGFzLmNoYXJhY3RlcihzbGVwX29yZG4wNikpLAogICAgICAgICBzbGVwX29yZG4wNiA9IGZhY3RvcihzbGVwX29yZG4wNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygibm9ib2R5IiwgInNwb3VzZSIsICJzaXN0ZXIiLCAiYnJvdGhlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdWdodGVyIiwgInNvbiIsICJtb3RoZXIiLCAiZmF0aGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3JhbmRwYXJlbnQiLCAiZ3JhbmRjaGlsZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdGhlciByZWxhdGl2ZSIsICJub24tcmVsYXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIikpKSAlPiUKICBjb3VudChzbGVwX2N0cnksIHNsZXBfb3JkbjA2KSAlPiUKICBjb21wbGV0ZShzbGVwX29yZG4wNiwgbmVzdGluZyhzbGVwX2N0cnkpLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX29yZG4wNiwgeSA9IHByb3AsIGZpbGwgPSBzbGVwX2N0cnkpKSArCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhzbGVwX2N0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjYuIElmIHllcywgd2hvIGVsc2Ugc2xlZXBzIGluIHRoZSBzYW1lIHJvb20gd2l0aCB5b3U/IFBsZWFzZSBjaXJjbGUgdGhlIHBlcnNvbihzKSBmcm9tIHRoZSBsaXN0IChgc2xlcF9vcmRuMDZgKSIsIAogICAgICAgeCA9ICJSZXNwb25zZSIsIHkgPSAiUHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMiKQpgYGAKCgojIyA3LiBXaGF0IGRvZXMgeW91ciBmYW1pbHkgdXNlIHRvIHNlZSBhdCBuaWdodD8gKGBzbGVwX29yZG4wN2ApCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuNSwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjA3ID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMDcpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjA3KSksCiAgICAgICAgIHNsZXBfb3JkbjA3ID0gZmFjdG9yKHNsZXBfb3JkbjA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJub3RoaW5nLCBqdXN0IHRoZSBtb29uIGFuZCBzdGFycyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpZ2h0IGZyb20gdGhlIGNvb2tpbmcgZmlyZSBvciBoZWFydGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5kbGVzIG9yIHN0cmF3IHRvcmNoZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvaWwgb3Iga2Vyb3NlbmUgbGFtcCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYXR0ZXJ5LWRyaXZlbiBsYW1wIG9yIGZsYXNobGlnaHQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWxlY3RyaWMgbGlnaHQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4wNykgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMDcsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMDcsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICI3LiBXaGF0IGRvZXMgeW91ciBmYW1pbHkgdXNlIHRvIHNlZSBhdCBuaWdodD8gKGBzbGVwX29yZG4wN2ApIiwgCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKCiMjIDguIERvIHlvdSB1c3VhbGx5IHRha2UgbmFwcz8gKGBzbGVwX29yZG4wOGApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjA4ID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMDgpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjA4KSksCiAgICAgICAgIHNsZXBfb3JkbjA4ID0gZmFjdG9yKHNsZXBfb3JkbjA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJubyIsICJ5ZXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4wOCkgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMDgsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMDgsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICI4LiBEbyB5b3UgdXN1YWxseSB0YWtlIG5hcHM/IChgc2xlcF9vcmRuMDhgKSIsIAogICAgICAgeCA9ICJSZXNwb25zZSIsIHkgPSAiUHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMiKQpgYGAKCgojIyA5LiBJZiBzbywgaG93IG9mdGVuIGRvIHlvdSByZXN0IG9yIG5hcD8gKGBzbGVwX29yZG4wOWApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjA5ID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMDkpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjA5KSksCiAgICAgICAgIHNsZXBfb3JkbjA5ID0gZmFjdG9yKHNsZXBfb3JkbjA5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJOQSAobmV2ZXIpIiwgInJhcmVseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvbWV0aW1lcyAoMS0yIHRpbWVzIGEgd2VlaykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c3VhbGx5IGJ1dCBub3QgZXZlcnlkYXkgKDMtNiB0aW1lcyBhIHdlZWspIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXZlcnkgZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4wOSkgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMDksIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMDksIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICI5LiBJZiBzbywgaG93IG9mdGVuIGRvIHlvdSByZXN0IG9yIG5hcD8gKGBzbGVwX29yZG4wOWApIiwgCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX29yZG4wOSkgJT4lCiAgZmlsdGVyKHNsZXBfb3JkbjA5ICE9ICIuIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gc2xlcF9vcmRuMDksIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgd2lkdGggPSAwLjI1LCBoZWlnaHQgPSAwLjI1KSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogICAgICAgICAgICAgICAgICAgIG11dGF0ZShzbGVwX29yZG4wOSA9IGFzLm51bWVyaWMoc2xlcF9vcmRuMDkpKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzbGVwX29yZG4wOSIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjkuIElmIHNvLCBob3cgb2Z0ZW4gZG8geW91IHJlc3Qgb3IgbmFwPyAoYHNsZXBfb3JkbjA5YCkiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlJlc3BvbnNlIikKYGBgCgojIyAxMC4gV2hlbiBkbyB5b3UgdHlwaWNhbGx5IGZhbGwgYXNsZWVwIGV2ZXJ5IG5pZ2h0IGFuZCB3YWtlIHVwIGV2ZXJ5IG5pZ2h0PyAoYHNsZXBfb3JkbjEwYCkKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChzbGVwX2N0cnksIHNsZXBfc3Viaiwgc2xlcF9kYXRldGltZXNsZWVwLCBzbGVwX2RhdGV0aW1ld2FrZSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc2xlcF9kYXRldGltZXNsZWVwLCBzbGVwX2RhdGV0aW1ld2FrZSksCiAgICAgICAgICAgIGZ1bnMoYXMuY2hhcmFjdGVyKSkgJT4lCiAgZ2F0aGVyKHNsZWVwd2FrZSwgdGltZSwgLWMoc2xlcF9jdHJ5LCBzbGVwX3N1YmopKSAlPiUKICBtdXRhdGUodGltZSA9IHBhcnNlX2RhdGV0aW1lKHRpbWUpLAogICAgICAgICBzbGVlcHdha2UgPSBmYWN0b3Ioc2xlZXB3YWtlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygic2xlcF9kYXRldGltZXNsZWVwIiwgInNsZXBfZGF0ZXRpbWV3YWtlIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJmYWxsIGFzbGVlcCIsICJ3YWtlIHVwIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB0aW1lLCBmaWxsID0gc2xlcF9jdHJ5LCBjb2xvciA9IHNsZWVwd2FrZSkpICsKICBmYWNldF93cmFwKH4gc2xlcF9jdHJ5LCBuY29sID0gMykgKwogIGdlb21fZGVuc2l0eShwb3NpdGlvbiA9ICJpZGVudGl0eSIsIGFscGhhID0gMC41LCBzaXplID0gMC44KSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gcGFzdGUodG9kYXkoKSArIDEsICIxMjowMCBBTSIpICU+JSAKICAgICAgICAgICAgICAgYXNfZGF0ZXRpbWUoZm9ybWF0ID0gIiVZLSVtLSVkICVJOiVNICVwIiksIAogICAgICAgICAgICAgY29sb3IgPSAiZGFya2JsdWUiLCBsdHkgPSAyKSArCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gcGFzdGUodG9kYXkoKSArIDEsICIwODowMCBBTSIpICU+JSAKICAgICAgICAgICAgICAgYXNfZGF0ZXRpbWUoZm9ybWF0ID0gIiVZLSVtLSVkICVJOiVNICVwIiksIAogICAgICAgICAgICAgY29sb3IgPSAiZGFya3JlZCIsIGx0eSA9IDIpICsKICAjIGFubm90YXRlKCJ0ZXh0IiwKICAjICAgICAgICAgIHggPSBwYXN0ZSh0b2RheSgpICsgMSwgIjE6MDAgQU0iKSAlPiUKICAjICAgICAgICAgICAgYXNfZGF0ZXRpbWUoZm9ybWF0ID0gIiVZLSVtLSVkICVJOiVNICVwIiksCiAgIyAgICAgICAgICB5ID0gMC4wMDAxNSwgbGFiZWwgPSAi4oaQIG1pZG5pZ2h0IiwgaGp1c3QgPSAwKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImRhcmtibHVlIiwgImRhcmtyZWQiKSwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV94X2RhdGV0aW1lKGRhdGVfYnJlYWtzID0gIjYgaG91cnMiLCBkYXRlX21pbm9yX2JyZWFrcyA9ICAiMiBob3VycyIsIAogICAgICAgICAgICAgICAgICAgZGF0ZV9sYWJlbHMgPSAiJUk6JW0gJXAiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgbGFicyh0aXRsZSA9ICIxMC4gV2hlbiBkbyB5b3UgdHlwaWNhbGx5IGZhbGwgYXNsZWVwIGV2ZXJ5IG5pZ2h0IGFuZCB3YWtlIHVwIGV2ZXJ5IG5pZ2h0PyAoYHNsZXBfb3JkbjEwYCkiLCAKICAgICAgIHN1YnRpdGxlID0gIk5PVEU6IExvdHMgb2YgbWlzc2luZyBkYXRhIGhlcmUhXG5Eb3R0ZWQgbGluZXMgaW5kaWNhdGUgMTI6MDAgQU0gKG1pZG5pZ2h0KSBhbmQgODowMEFNOyBibHVlIG91dGxpbmUgaW5kaWNhdGVzIHRpbWUgdG8gZmFsbCBhc2xlZXAsIGFuZCByZWQgaW5kaWNhdGVzIHRpbWUgdG8gd2FrZSB1cCIsCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJEZW5zaXR5ICh+cHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMpIiwgCiAgICAgICBjb2xvciA9ICJTbGVlcCB2cy4gd2FrZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGluY2x1ZGUgPSBUfQpkICU+JQogIGdncGxvdChhZXMoeCA9IHNsZXBfZHVyYXRpb25fbnVtLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X3dyYXAofiBzbGVwX2N0cnksIG5jb2wgPSAzKSArCiAgZ2VvbV9kZW5zaXR5KHBvc2l0aW9uID0gImlkZW50aXR5IiwgYWxwaGEgPSAwLjUsIHNpemUgPSAwLjgpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSA4LCBsdHkgPSAyKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKSArCiAgbGFicyh0aXRsZSA9ICJMZW5ndGggb2Ygc2xlZXAgKGRlcml2ZWQgZnJvbSBgc2xlcF9vcmRuMTBgKSIsIAogICAgICAgc3VidGl0bGUgPSAiTk9URTogTG90cyBvZiBtaXNzaW5nIGRhdGEgaGVyZSFcbkRvdHRlZCBsaW5lIGluZGljYXRlcyA4IGhvdXJzIiwKICAgICAgIHggPSAiTGVuZ3RoIG9mIHNsZWVwIChob3VycykiLCB5ID0gIkRlbnNpdHkgKH5wcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMSwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3Qoc2xlcF9zdWJqLCBzbGVwX2N0cnksIHNsZXBfZHVyYXRpb25fbnVtKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHNsZXBfZHVyYXRpb25fbnVtKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gc2xlcF9kdXJhdGlvbl9udW0sIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDgsIGx0eSA9IDIpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHdpZHRoID0gMC4yNSwgaGVpZ2h0ID0gMC4yNSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkoc2xlcF9jdHJ5KSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzbGVwX2R1cmF0aW9uX251bSIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKHRyYW5zID0gImxvZzFwIiwgYnJlYWtzID0gc2VxKDAsIDEwMCwgNCkpICsKICAjIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiTGVuZ3RoIG9mIHNsZWVwIChkZXJpdmVkIGZyb20gYHNsZXBfb3JkbjEwYCkiLAogICAgICAgc3VidGl0bGUgPSAiTk9URTogTG90cyBvZiBtaXNzaW5nIGRhdGEgaGVyZSFcblBsb3R0ZWQgYWZ0ZXIgYXBwbHlpbmcgbG9nIHRyYW5zZm9ybWF0aW9uIHRvIGhpZ2hsaWdodCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHNpdGVzXG5FcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzO1xuRG90dGVkIGxpbmUgaW5kaWNhdGVzIDggaG91cnMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJMZW5ndGggb2Ygc2xlZXAgKGhvdXJzKSIpCmBgYAoKCiMjIDExLiBEb2VzIHRoYXQgdmFyeSBhIGxvdCBmcm9tIG5pZ2h0IHRvIG5pZ2h0PyAoYHNsZXBfb3JkbjExYCkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBtdXRhdGUoc2xlcF9vcmRuMTEgPSBjYXNlX3doZW4oZ3JlcGwoIiwiLCBzbGVwX29yZG4xMSkgfiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoc2xlcF9vcmRuMTEpKSwKICAgICAgICAgc2xlcF9vcmRuMTEgPSBmYWN0b3Ioc2xlcF9vcmRuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoMTo1LCAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4xMSkgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMTEsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMTEsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIxMS4gRG9lcyB0aGF0IHZhcnkgYSBsb3QgZnJvbSBuaWdodCB0byBuaWdodD8gRm9yIGV4YW1wbGUsIGRvIHlvdSByZWd1bGFybHkgc2xlZXAgZnJvbSBvbmVcbnRpbWUgKG1heWJlIDEwIHBtKSB0byBhbm90aGVyIHRpbWUgKG1heWJlIDYgYW0pIGVhY2ggbmlnaHQsIG9yIHNvbWV0aW1lcyBkbyB5b3Ugc2xlZXBcbmF0IDEwLCBvdGhlciBuaWdodHMgbWlkbmlnaHQsIHNvbWUgZGF5cyB5b3UgZ2V0IHVwIGF0IDIgYW0sIHNvbWV0aW1lcyBhbmQgNSBhbSxcbnNvbWV0aW1lcyA3IGFtLCBhdCB2ZXJ5IGRpZmZlcmVudCB0aW1lcz8gKGBzbGVwX29yZG4xMWApIiwKICAgICAgIHN1YnRpdGxlID0gIjE6IE5vIHZhcmlhdGlvbiwgNTogVmVyeSB2ZXJ5IHZhcmllZCIsCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX29yZG4xMSkgJT4lCiAgZmlsdGVyKHNsZXBfb3JkbjExICE9ICIuIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gc2xlcF9vcmRuMTEsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgd2lkdGggPSAwLjI1LCBoZWlnaHQgPSAwLjI1KSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogICAgICAgICAgICAgICAgICAgIG11dGF0ZShzbGVwX29yZG4xMSA9IGFzLm51bWVyaWMoc2xlcF9vcmRuMTEpKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzbGVwX29yZG4xMSIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjExLiBEb2VzIHRoYXQgdmFyeSBhIGxvdCBmcm9tIG5pZ2h0IHRvIG5pZ2h0PyBGb3IgZXhhbXBsZSwgZG8geW91IHJlZ3VsYXJseSBzbGVlcCBmcm9tIG9uZVxudGltZSAobWF5YmUgMTAgcG0pIHRvIGFub3RoZXIgdGltZSAobWF5YmUgNiBhbSkgZWFjaCBuaWdodCwgb3Igc29tZXRpbWVzIGRvIHlvdSBzbGVlcFxuYXQgMTAsIG90aGVyIG5pZ2h0cyBtaWRuaWdodCwgc29tZSBkYXlzIHlvdSBnZXQgdXAgYXQgMiBhbSwgc29tZXRpbWVzIGFuZCA1IGFtLFxuc29tZXRpbWVzIDcgYW0sIGF0IHZlcnkgZGlmZmVyZW50IHRpbWVzPyAoYHNsZXBfb3JkbjExYCkiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlJlc3BvbnNlICgxOiBObyB2YXJpYXRpb24sIDU6IFZlcnkgdmVyeSB2YXJpZWQpIikKYGBgCgoKIyMgMTJhLiBSQSBqdWRnbWVudCBmb3IgaG91cnMgc2xlcHQgKGBzbGVwX29yZG4xMmFgLCBkZXJpdmVkIGZyb20gYHNsZXBfb3JkbjEyYCkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChzbGVwX3N1YmosIHNsZXBfY3RyeSwgc2xlcF9vcmRuMTJhKSAlPiUKICBmaWx0ZXIoc2xlcF9vcmRuMTJhICE9ICIuIikgJT4lCiAgZmlsdGVyKHNsZXBfb3JkbjEyYSA8PSAyMCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gc2xlcF9vcmRuMTJhLCBjb2xvciA9IHNsZXBfY3RyeSkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSA4LCBsdHkgPSAyKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHNsZXBfb3JkbjEyYSA9IGFzLm51bWVyaWMoc2xlcF9vcmRuMTJhKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2xlcF9vcmRuMTJhIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICAjIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiMTJhLiBSQSBqdWRnbWVudCBmb3IgaG91cnMgc2xlcHQgKGBzbGVwX29yZG4xMmFgLCBkZXJpdmVkIGZyb20gYHNsZXBfb3JkbjEyYCkiLAogICAgICAgc3VidGl0bGUgPSAiTk9URTogRXhjbHVkZWQgb25lIG91dGxpZXIgKDEgcGFydGljaXBhbnQgaW4gVlQgd2hvIHdhcyBqdWRnZWQgdG8gc2xlZXAgPiAyMCBob3VycztcbkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgY29uZmlkZW5jZSBpbnRlcnZhbHM7IGRvdHRlZCBsaW5lIGluZGljYXRlcyA4IGhvdXJzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiTnVtYmVyIG9mIGhvdXJzIHNsZXB0IChSQSBqdWRnbWVudCkiKQpgYGAKCgojIyAxMy4gV2hhdCBkbyB5b3UgdGhpbmsgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHJvbGUgb2Ygc2xlZXAgZm9yIHlvdT8gKGBzbGVwX29yZG4xM2ApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3Qoc2xlcF9jdHJ5LCBzbGVwX3N1YmosIHNsZXBfb3JkbjExX3dvcmxkb2ZzcGlyaXRzLAogICAgICAgICAgIHNsZXBfb3JkbjEzX2RlZXBzZWxmLCBzbGVwX29yZG4xM19taW5kb2ZmLCBzbGVwX29yZG4xM19yZXBsZW5pc2gpICU+JQogIGdhdGhlcihyb2xlLCByZXNwb25zZSwgLWMoc2xlcF9jdHJ5LCBzbGVwX3N1YmopKSAlPiUKICBtdXRhdGUocm9sZSA9IHJlY29kZV9mYWN0b3Iocm9sZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsZXBfb3JkbjEzX3JlcGxlbmlzaCIgPSAicmVwbGVuaXNoIGVuZXJneSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGVwX29yZG4xM19taW5kb2ZmIiA9ICJzaHV0IHlvdXIgbWluZCBvZmYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xlcF9vcmRuMTNfZGVlcHNlbGYiID0gImdhaW4gYWNjZXNzIHRvIHlvdXIgZGVlcGVzdCBzZWxmIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsZXBfb3JkbjExX3dvcmxkb2ZzcGlyaXRzIiA9ICJjb25uZWN0IHdpdGggYSB3b3JsZCBvZiBzcGlyaXRzIiksCiAgICAgICAgIHJlc3BvbnNlID0gY2FzZV93aGVuKGlzLm5hKHJlc3BvbnNlKSB+ICJub3Qgc2VsZWN0ZWQiLCBUUlVFIH4gcmVzcG9uc2UpLAogICAgICAgICByZXNwb25zZSA9IGZhY3RvcihyZXNwb25zZSwgbGV2ZWxzID0gYygibm90IHNlbGVjdGVkIiwgInllcyIpKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcm9sZSwgZmlsbCA9IHNsZXBfY3RyeSwgYWxwaGEgPSByZXNwb25zZSkpICsKICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKHNsZXBfY3RyeSkpICsKICBnZW9tX2JhcihzdGF0ID0gImNvdW50IiwgcG9zaXRpb24gPSAiZmlsbCIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV9hbHBoYV9tYW51YWwodmFsdWVzID0gYygwLjEsIDEpLCBndWlkZSA9ICJub25lIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiMTMuIFdoYXQgZG8geW91IHRoaW5rIGlzIHRoZSBtb3N0IGltcG9ydGFudCByb2xlIG9mIHNsZWVwIGZvciB5b3U/IChgc2xlcF9vcmRuMTNgKSIsIAogICAgICAgeCA9ICJSb2xlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyBzZWxlY3RpbmcgJ3llcyciKQpgYGAKCgojIyAxNC4gRG8geW91IGxvb2sgZm9yd2FyZCB0byBkcmVhbWluZz8gKGBzbGVwX29yZG4xNGApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjE0ID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMTQpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjE0KSksCiAgICAgICAgIHNsZXBfb3JkbjE0ID0gZmFjdG9yKHNsZXBfb3JkbjE0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJubyIsICJhIGxpdHRsZSIsICJhIGxvdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiKSkpICU+JQogIGNvdW50KHNsZXBfY3RyeSwgc2xlcF9vcmRuMTQpICU+JQogIGNvbXBsZXRlKHNsZXBfb3JkbjE0LCBuZXN0aW5nKHNsZXBfY3RyeSksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZ3JvdXBfYnkoc2xlcF9jdHJ5KSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4sIG5hLnJtID0gVCkpICU+JQogIGdncGxvdChhZXMoeCA9IHNsZXBfb3JkbjE0LCB5ID0gcHJvcCwgZmlsbCA9IHNsZXBfY3RyeSkpICsKICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKHNsZXBfY3RyeSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiMTQuIERvIHlvdSBsb29rIGZvcndhcmQgdG8gZHJlYW1pbmc/IChgc2xlcF9vcmRuMTRgKSIsCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX29yZG4xNCkgJT4lCiAgZmlsdGVyKHNsZXBfb3JkbjE0ICE9ICIuIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gc2xlcF9vcmRuMTQsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgd2lkdGggPSAwLjI1LCBoZWlnaHQgPSAwLjI1KSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogICAgICAgICAgICAgICAgICAgIG11dGF0ZShzbGVwX29yZG4xNCA9IGFzLm51bWVyaWMoc2xlcF9vcmRuMTQpKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzbGVwX29yZG4xNCIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjE0LiBEbyB5b3UgbG9vayBmb3J3YXJkIHRvIGRyZWFtaW5nPyAoYHNsZXBfb3JkbjE0YCkiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlJlc3BvbnNlIikKYGBgCgoKIyMgMTUuIEFyZSBkcmVhbXMgYW4gaW1wb3J0YW50IHNvdXJjZSBvZiBzcGlyaXR1YWwgaW5zaWdodCBmb3IgeW91PyAoYHNsZXBfb3JkbjE1YCkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBtdXRhdGUoc2xlcF9vcmRuMTUgPSBjYXNlX3doZW4oZ3JlcGwoIiwiLCBzbGVwX29yZG4xNSkgfiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoc2xlcF9vcmRuMTUpKSwKICAgICAgICAgc2xlcF9vcmRuMTUgPSBmYWN0b3Ioc2xlcF9vcmRuMTUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm5ldmVyIiwgInJhcmVseSIsICJzb21ldGltZXMiLCAib2Z0ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIikpKSAlPiUKICBjb3VudChzbGVwX2N0cnksIHNsZXBfb3JkbjE1KSAlPiUKICBjb21wbGV0ZShzbGVwX29yZG4xNSwgbmVzdGluZyhzbGVwX2N0cnkpLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX29yZG4xNSwgeSA9IHByb3AsIGZpbGwgPSBzbGVwX2N0cnkpKSArCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhzbGVwX2N0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjE1LiBBcmUgZHJlYW1zIGFuIGltcG9ydGFudCBzb3VyY2Ugb2Ygc3Bpcml0dWFsIGluc2lnaHQgZm9yIHlvdT8gKGBzbGVwX29yZG4xNWApIiwKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3Qoc2xlcF9zdWJqLCBzbGVwX2N0cnksIHNsZXBfb3JkbjE1KSAlPiUKICBmaWx0ZXIoc2xlcF9vcmRuMTUgIT0gIi4iKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX2N0cnksIHkgPSBzbGVwX29yZG4xNSwgY29sb3IgPSBzbGVwX2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHNsZXBfb3JkbjE1ID0gYXMubnVtZXJpYyhzbGVwX29yZG4xNSkpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNsZXBfb3JkbjE1IikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICAjIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiMTUuIEFyZSBkcmVhbXMgYW4gaW1wb3J0YW50IHNvdXJjZSBvZiBzcGlyaXR1YWwgaW5zaWdodCBmb3IgeW91PyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUmVzcG9uc2UiKQpgYGAKCgojIyAxNi4gRG8geW91IHJlZ2FyZCBzbGVlcCBhcyBhIGRvb3J3YXkgaW50byBhbm90aGVyIHdheSBvZiBiZWluZz8gKGBzbGVwX29yZG4xNmApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjE2ID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMTYpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjE2KSksCiAgICAgICAgIHNsZXBfb3JkbjE2ID0gZmFjdG9yKHNsZXBfb3JkbjE2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJubyIsICJ5ZXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4xNikgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMTYsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMTYsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIxNi4gRG8geW91IHJlZ2FyZCBzbGVlcCBhcyBhIGRvb3J3YXkgaW50byBhbm90aGVyIHdheSBvZiBiZWluZz8gKGBzbGVwX29yZG4xNmApIiwgCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKCiMjIDE3LiBEbyBzcGVjaWFsIHNwaXJpdHVhbCB0aGluZ3MgaGFwcGVuIGR1cmluZyB0aGUgbmlnaHQgZm9yIHlvdT8gKGBzbGVwX29yZG4xN2ApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjE3ID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMTcpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjE3KSksCiAgICAgICAgIHNsZXBfb3JkbjE3ID0gZmFjdG9yKHNsZXBfb3JkbjE3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJuZXZlciIsICJyYXJlbHkiLCAic29tZXRpbWVzIiwgIm9mdGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4xNykgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMTcsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMTcsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIxNy4gRG8gc3BlY2lhbCBzcGlyaXR1YWwgdGhpbmdzIGhhcHBlbiBkdXJpbmcgdGhlIG5pZ2h0IGZvciB5b3U/IChgc2xlcF9vcmRuMTdgKSIsCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX29yZG4xNykgJT4lCiAgZmlsdGVyKHNsZXBfb3JkbjE3ICE9ICIuIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gc2xlcF9vcmRuMTcsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgd2lkdGggPSAwLjI1LCBoZWlnaHQgPSAwLjI1KSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogICAgICAgICAgICAgICAgICAgIG11dGF0ZShzbGVwX29yZG4xNyA9IGFzLm51bWVyaWMoc2xlcF9vcmRuMTcpKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzbGVwX29yZG4xNyIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjE3LiBEbyBzcGVjaWFsIHNwaXJpdHVhbCB0aGluZ3MgaGFwcGVuIGR1cmluZyB0aGUgbmlnaHQgZm9yIHlvdT8iLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlJlc3BvbnNlIikKYGBgCgoKIyMgMTguIERvIHlvdSB3YWtlIHVwIHRvIHByYXkgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbmlnaHQ/IChgc2xlcF9vcmRuMThgKQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIG11dGF0ZShzbGVwX29yZG4xOCA9IGNhc2Vfd2hlbihncmVwbCgiLCIsIHNsZXBfb3JkbjE4KSB+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IGFzLmNoYXJhY3RlcihzbGVwX29yZG4xOCkpLAogICAgICAgICBzbGVwX29yZG4xOCA9IGZhY3RvcihzbGVwX29yZG4xOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygibmV2ZXIiLCAicmFyZWx5IiwgInNvbWV0aW1lcyIsICJvZnRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiKSkpICU+JQogIGNvdW50KHNsZXBfY3RyeSwgc2xlcF9vcmRuMTgpICU+JQogIGNvbXBsZXRlKHNsZXBfb3JkbjE4LCBuZXN0aW5nKHNsZXBfY3RyeSksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZ3JvdXBfYnkoc2xlcF9jdHJ5KSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4sIG5hLnJtID0gVCkpICU+JQogIGdncGxvdChhZXMoeCA9IHNsZXBfb3JkbjE4LCB5ID0gcHJvcCwgZmlsbCA9IHNsZXBfY3RyeSkpICsKICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKHNsZXBfY3RyeSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiMTguIERvIHlvdSB3YWtlIHVwIHRvIHByYXkgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbmlnaHQ/IChgc2xlcF9vcmRuMThgKSIsCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX29yZG4xOCkgJT4lCiAgZmlsdGVyKHNsZXBfb3JkbjE4ICE9ICIuIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gc2xlcF9vcmRuMTgsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgd2lkdGggPSAwLjI1LCBoZWlnaHQgPSAwLjI1KSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogICAgICAgICAgICAgICAgICAgIG11dGF0ZShzbGVwX29yZG4xOCA9IGFzLm51bWVyaWMoc2xlcF9vcmRuMTgpKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzbGVwX29yZG4xOCIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjE4LiBEbyB5b3Ugd2FrZSB1cCB0byBwcmF5IGluIHRoZSBtaWRkbGUgb2YgdGhlIG5pZ2h0PyIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUmVzcG9uc2UiKQpgYGAKCgojIyAxOWEuIFJBIGp1ZGdtZW50IGZvciB0aW1lIHNwZW50IGluIHByYXllciAoYHNsZXBfb3JkbjE5YWAsIGRlcml2ZWQgZnJvbSBgc2xlcF9vcmRuMTlgKQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX29yZG4xOWEpICU+JQogIGZpbHRlcihzbGVwX29yZG4xOWEgIT0gIi4iKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX2N0cnksIHkgPSBzbGVwX29yZG4xOWEsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDYwLCBsdHkgPSAyKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHNsZXBfb3JkbjE5YSA9IGFzLm51bWVyaWMoc2xlcF9vcmRuMTlhKSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2xlcF9vcmRuMTlhIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXModHJhbnMgPSAibG9nMXAiLCBicmVha3MgPSBzZXEoMCwgMTAwMCwgNjApKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjE5YS4gUkEganVkZ21lbnQgZm9yIHRpbWUgc3BlbnQgaW4gcHJheWVyIChgc2xlcF9vcmRuMTlhYCwgZGVyaXZlZCBmcm9tIGBzbGVwX29yZG4xOWApIiwKICAgICAgIHN1YnRpdGxlID0gIk5PVEU6IFBsb3R0ZWQgYWZ0ZXIgYXBwbHlpbmcgbG9nIHRyYW5zZm9ybWF0aW9uIHRvIGhpZ2hsaWdodCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHNpdGVzXG5FcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzOyBkb3R0ZWQgbGluZXMgaW5kaWNhdGVzIDEgaG91ciIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIk51bWJlciBvZiBtaW51dGVzIHNwZW50IGluIHByYXllciAoUkEganVkZ21lbnQpIikKYGBgCgoKIyMgMjAuIElmIHlvdSBkbywgZG8geW91IGdvIGJhY2sgdG8gc2xlZXA/IChgc2xlcF9vcmRuMjBgKQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIG11dGF0ZShzbGVwX29yZG4yMCA9IGNhc2Vfd2hlbihncmVwbCgiLCIsIHNsZXBfb3JkbjIwKSB+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IGFzLmNoYXJhY3RlcihzbGVwX29yZG4yMCkpLAogICAgICAgICBzbGVwX29yZG4yMCA9IGZhY3RvcihzbGVwX29yZG4yMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygibmV2ZXIiLCAicmFyZWx5IiwgInNvbWV0aW1lcyIsICJvZnRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiKSkpICU+JQogIGNvdW50KHNsZXBfY3RyeSwgc2xlcF9vcmRuMjApICU+JQogIGNvbXBsZXRlKHNsZXBfb3JkbjIwLCBuZXN0aW5nKHNsZXBfY3RyeSksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZ3JvdXBfYnkoc2xlcF9jdHJ5KSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4sIG5hLnJtID0gVCkpICU+JQogIGdncGxvdChhZXMoeCA9IHNsZXBfb3JkbjIwLCB5ID0gcHJvcCwgZmlsbCA9IHNsZXBfY3RyeSkpICsKICBmYWNldF9ncmlkKGNvbHMgPSB2YXJzKHNsZXBfY3RyeSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiMjAuIElmIHlvdSBkbywgZG8geW91IGdvIGJhY2sgdG8gc2xlZXA/IChgc2xlcF9vcmRuMjBgKSIsCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX29yZG4yMCkgJT4lCiAgZmlsdGVyKHNsZXBfb3JkbjIwICE9ICIuIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gc2xlcF9vcmRuMjAsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgd2lkdGggPSAwLjI1LCBoZWlnaHQgPSAwLjI1KSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogICAgICAgICAgICAgICAgICAgIG11dGF0ZShzbGVwX29yZG4yMCA9IGFzLm51bWVyaWMoc2xlcF9vcmRuMjApKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzbGVwX29yZG4yMCIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjIwLiBJZiB5b3UgZG8sIGRvIHlvdSBnbyBiYWNrIHRvIHNsZWVwPyAoYHNsZXBfb3JkbjIwYCkiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlJlc3BvbnNlIikKYGBgCgoKIyMgMjEuIERvIHlvdSBpbnRlbnRpb25hbGx5IHNsZWVwIGluIGFueSBzcGVjaWZpYyBwb3NpdGlvbnMgdGhhdCBoYXZlIHNwaXJpdHVhbCBvciBoZWFsdGggY29uc2VxdWVuY2VzPyAoYHNsZXBfb3JkbjIxYCkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBpbmNsdWRlID0gVH0KZCAlPiUKICBtdXRhdGUoc2xlcF9vcmRuMjEgPSBjYXNlX3doZW4oZ3JlcGwoIiwiLCBzbGVwX29yZG4yMSkgfiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoc2xlcF9vcmRuMjEpKSwKICAgICAgICAgc2xlcF9vcmRuMjEgPSBmYWN0b3Ioc2xlcF9vcmRuMjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIm5ldmVyIiwgInJhcmVseSIsICJzb21ldGltZXMiLCAib2Z0ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBhbnN3ZXJzIHNlbGVjdGVkIikpKSAlPiUKICBjb3VudChzbGVwX2N0cnksIHNsZXBfb3JkbjIxKSAlPiUKICBjb21wbGV0ZShzbGVwX29yZG4yMSwgbmVzdGluZyhzbGVwX2N0cnkpLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgbXV0YXRlKHByb3AgPSBuL3N1bShuLCBuYS5ybSA9IFQpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX29yZG4yMSwgeSA9IHByb3AsIGZpbGwgPSBzbGVwX2N0cnkpKSArCiAgZmFjZXRfZ3JpZChjb2xzID0gdmFycyhzbGVwX2N0cnkpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjIxLiBEbyB5b3UgaW50ZW50aW9uYWxseSBzbGVlcCBpbiBhbnkgc3BlY2lmaWMgcG9zaXRpb25zIHRoYXQgaGF2ZSBzcGlyaXR1YWwgb3JcbmhlYWx0aCBjb25zZXF1ZW5jZXM/IChgc2xlcF9vcmRuMjFgKSIsCiAgICAgICB4ID0gIlJlc3BvbnNlIiwgeSA9ICJQcm9wb3J0aW9uIG9mIHBhcnRpY2lwYW50cyIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX29yZG4yMSkgJT4lCiAgZmlsdGVyKHNsZXBfb3JkbjIxICE9ICIuIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gc2xlcF9vcmRuMjEsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgd2lkdGggPSAwLjI1LCBoZWlnaHQgPSAwLjI1KSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogICAgICAgICAgICAgICAgICAgIG11dGF0ZShzbGVwX29yZG4yMSA9IGFzLm51bWVyaWMoc2xlcF9vcmRuMjEpKSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzbGVwX29yZG4yMSIpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIjIxLiBEbyB5b3UgaW50ZW50aW9uYWxseSBzbGVlcCBpbiBhbnkgc3BlY2lmaWMgcG9zaXRpb25zIHRoYXQgaGF2ZSBzcGlyaXR1YWwgb3JcbmhlYWx0aCBjb25zZXF1ZW5jZXM/IChgc2xlcF9vcmRuMjFgKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUmVzcG9uc2UiKQpgYGAKCgojIyAyMi4gRG8geW91IGludGVyYWN0IHdpdGggR29kIG9yIHdpdGggc3Bpcml0cyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBuaWdodD8gKGBzbGVwX29yZG4yMmApCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgbXV0YXRlKHNsZXBfb3JkbjIyID0gY2FzZV93aGVuKGdyZXBsKCIsIiwgc2xlcF9vcmRuMjIpIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIGFuc3dlcnMgc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKHNsZXBfb3JkbjIyKSksCiAgICAgICAgIHNsZXBfb3JkbjIyID0gZmFjdG9yKHNsZXBfb3JkbjIyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJuZXZlciIsICJyYXJlbHkiLCAic29tZXRpbWVzIiwgIm9mdGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwbGUgYW5zd2VycyBzZWxlY3RlZCIpKSkgJT4lCiAgY291bnQoc2xlcF9jdHJ5LCBzbGVwX29yZG4yMikgJT4lCiAgY29tcGxldGUoc2xlcF9vcmRuMjIsIG5lc3Rpbmcoc2xlcF9jdHJ5KSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBncm91cF9ieShzbGVwX2N0cnkpICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obiwgbmEucm0gPSBUKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9vcmRuMjIsIHkgPSBwcm9wLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIyMi4gRG8geW91IGludGVyYWN0IHdpdGggR29kIG9yIHdpdGggc3Bpcml0cyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBuaWdodD8gKGBzbGVwX29yZG4yMmApIiwKICAgICAgIHggPSAiUmVzcG9uc2UiLCB5ID0gIlByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3Qoc2xlcF9zdWJqLCBzbGVwX2N0cnksIHNsZXBfb3JkbjIyKSAlPiUKICBmaWx0ZXIoc2xlcF9vcmRuMjIgIT0gIi4iKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzbGVwX2N0cnksIHkgPSBzbGVwX29yZG4yMiwgY29sb3IgPSBzbGVwX2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCB3aWR0aCA9IDAuMjUsIGhlaWdodCA9IDAuMjUpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGdyb3VwX2J5KHNsZXBfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHNsZXBfb3JkbjIyID0gYXMubnVtZXJpYyhzbGVwX29yZG4yMikpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNsZXBfb3JkbjIyIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwgCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICAjIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNjAsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiMjIuIERvIHlvdSBpbnRlcmFjdCB3aXRoIEdvZCBvciB3aXRoIHNwaXJpdHMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbmlnaHQ/IChgc2xlcF9vcmRuMjJgKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUmVzcG9uc2UiKQpgYGAKCgojIyAyMy4gIFdoYXQgd2FrZXMgeW91IHVwIG1vc3QgYXQgbmlnaHQ/IChgc2xlcF9vcmRuMjNgKQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfY3RyeSwgc2xlcF9zdWJqLCBzbGVwX29yZG4yM19QaHlzaW9sb2dpY2FsLCAKICAgICAgICAgICBzbGVwX29yZG4yM19Qc3ljaG9sb2dpY2FsLCBzbGVwX29yZG4yM19EcmVhbXMsCiAgICAgICAgICAgc2xlcF9vcmRuMjNfU291bmQsIHNsZXBfb3JkbjIzX3N1cGVybmF0dXJhbHByYXllcikgJT4lCiAgZ2F0aGVyKHJvbGUsIHJlc3BvbnNlLCAtYyhzbGVwX2N0cnksIHNsZXBfc3ViaikpICU+JQogIG11dGF0ZShyb2xlID0gcmVjb2RlX2ZhY3Rvcihyb2xlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xlcF9vcmRuMjNfUGh5c2lvbG9naWNhbCIgPSAicGh5c2lvbG9naWNhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGVwX29yZG4yM19Qc3ljaG9sb2dpY2FsIiA9ICJwc3ljaG9sb2dpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsZXBfb3JkbjIzX0RyZWFtcyIgPSAiZHJlYW1zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsZXBfb3JkbjIzX1NvdW5kIiA9ICJzb3VuZHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xlcF9vcmRuMjNfc3VwZXJuYXR1cmFscHJheWVyIiA9ICJzdXBlcm5hdHVyYWwiKSwKICAgICAgICAgcmVzcG9uc2UgPSBjYXNlX3doZW4oaXMubmEocmVzcG9uc2UpIH4gIm5vdCBzZWxlY3RlZCIsIFRSVUUgfiByZXNwb25zZSksCiAgICAgICAgIHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLCBsZXZlbHMgPSBjKCJub3Qgc2VsZWN0ZWQiLCAieWVzIikpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSByb2xlLCBmaWxsID0gc2xlcF9jdHJ5LCBhbHBoYSA9IHJlc3BvbnNlKSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSkgKwogIGdlb21fYmFyKHN0YXQgPSAiY291bnQiLCBwb3NpdGlvbiA9ICJmaWxsIikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX2FscGhhX21hbnVhbCh2YWx1ZXMgPSBjKDAuMSwgMSksIGd1aWRlID0gIm5vbmUiKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICIyMy4gV2hhdCBkbyB5b3UgdGhpbmsgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHJvbGUgb2Ygc2xlZXAgZm9yIHlvdT8gKGBzbGVwX29yZG4yM2ApIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJOT1RFOiBOaWtraSdzIGNvZGVzO1xuLSBQaHlzaW9sb2dpY2FsOiBlLmcuLCBib2R5IG5lZWRzLCBzZW5zb3J5IGV4cGVyaWVuY2VzLCBubyByZWFzb25cbi0gUHN5Y2hvbG9naWNhbDogZS5nLiwgZW1vdGlvbnMsIHBsYW5zLCB0aG91Z2h0c1xuLSBEcmVhbXM6IGUuZy4sIGRyZWFtcywgbmlnaHRtYXJlcywgZmVlbGluZyBvZiBmYWxsaW5nKVxuLSBTb3VuZHM6IGUuZy4sIGFsYXJtLCBwZW9wbGUsIGFuaW1hbHNcbi0gU3VwZXJuYXR1cmFsOiBlLmcuLCBnb2QsIHNwaXJpdCwgcHJheWVyXG5OT1RFOiBtYW55IGFuc3dlcnMgbm90IHRyYW5zbGF0ZWQhIiwKICAgICAgIHggPSAiUm9sZSIsIHkgPSAiUHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMgc2VsZWN0aW5nICd5ZXMnIikKYGBgCgoKIyAiRWRnZSIgc3VydmV5CgojIyBUb3RhbCBzY29yZSAoYHNsZXBfZWRnZV90b3RhbGApCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9lZGdlX3RvdGFsLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X3dyYXAofiBzbGVwX2N0cnksIG5jb2wgPSAzKSArCiAgZ2VvbV9kZW5zaXR5KHBvc2l0aW9uID0gImlkZW50aXR5IiwgYWxwaGEgPSAwLjUsIHNpemUgPSAwLjgpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHRpdGxlID0gIkVkZ2UgdG90YWwgc2NvcmUgKGBzbGVwX2VkZ2VfdG90YWxgKSIsIAogICAgICAgeCA9ICJFZGdlIHRvdGFsIHNjb3JlIChyYW5nZTogMC02MCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAofnByb3BvcnRpb24gb2YgcGFydGljaXBhbnRzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBzbGVwX2VkZ2VfdG90YWwpICU+JQogIGZpbHRlcighaXMubmEoc2xlcF9lZGdlX3RvdGFsKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gc2xlcF9lZGdlX3RvdGFsLCBjb2xvciA9IHNsZXBfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHdpZHRoID0gMC4yNSwgaGVpZ2h0ID0gMC4yNSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgCiAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYnkoc2xlcF9jdHJ5KSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzbGVwX2VkZ2VfdG90YWwiKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNjAsIDEwKSkgKwogICMgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJFZGdlIHRvdGFsIHNjb3JlIChgc2xlcF9lZGdlX3RvdGFsYCkiLAogICAgICAgc3VidGl0bGUgPSAiRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIkVkZ2UgdG90YWwgc2NvcmUgKHJhbmdlOiAwLTYwKSIpCmBgYAoKCiMjIEluZGl2aWR1YWwgcXVlc3Rpb25zCgpUaGUgImVkZ2UiIHN1cnZleSBjb25zaXN0ZWQgb2YgMjAgcXVlc3Rpb25zLCBsYWJlbGVkIGFzIGZvbGxvd3MgKG9yZGVyIG1heSBoYXZlIHZhcmllZCBhY3Jvc3MgdmVyc2lvbnM/KToKCi0gYHNsZXBfZWRnZTAxYDogMTEuIEkndmUgZmVsdCBhbiBldmlsIHByZXNlbmNlIGluIHRoZSByb29tLCBidXQgY291bGQgbm90IHNlZSwgaGVhciwgdG91Y2ggb3Igc21lbGwgYW55b25lIHRoZXJlLgotIGBzbGVwX2VkZ2UwMmA6IDEyLiBJJ3ZlIGhlYXJkIHNvbWVvbmUgY2FsbGluZyBteSBuYW1lCi0gYHNsZXBfZWRnZTAzYDogMTMuIEkndmUgc2VlbiBhIGJsdXJyeSBodW1hbiBmaWd1cmUgaW4gdGhlIHJvb20uCi0gYHNsZXBfZWRnZTA0YDogMTQuSSd2ZSBoYWQgdGhlIHNlbnNlIG9mIGFuIGludmlzaWJsZSBwcmVzZW5jZSB3YXRjaGluZyBtZS4KLSBgc2xlcF9lZGdlMDVgOiAxNS4gSSd2ZSBoZWFyZCB0aGUgdm9pY2Ugb2YgYSBwZXJzb24gSSBjb3VsZCBub3QgaWRlbnRpZnkuCi0gYHNsZXBfZWRnZTA2YDogMTYuIEkndmUgaGVhcmQgaHVtYW4gc3BlZWNoIHdoaWNoIHNwb2tlIGluIGEgZ2FyYmxlZCwgdW5jbGVhciB3YXkuCi0gYHNsZXBfZWRnZTA3YDogMTcuIEkndmUgc2VlbiB0aGUgaW1hZ2Ugb2YgYSBmYWNlLgotIGBzbGVwX2VkZ2UwOGA6IDE4LiBJJ3ZlIGhlYXJkIHRoZSB2b2ljZSBvZiBzb21lb25lIGZhbWlsaWFyIHRvIG1lLgotIGBzbGVwX2VkZ2UwOWA6IDE5LiBJJ3ZlIHNlZSB0aGluZ3Mgb3IgZmlndXJlcyBmbG9hdGluZyBpbiBteSByb29tLgotIGBzbGVwX2VkZ2UxMGA6IDIwLiBJJ3ZlIGZlbHQgdGhlIHByZXNlbmNlIG9mIGFuIGludHJ1ZGVyIGluIG15IGJlZHJvb20sIHRob3VnaCBJIGRpZCBub3QgYWN0dWFsbHkgc2VlLCBoZWFyLCB0b3VjaCBvciBzbWVsbCBhbnlvbmUKLSBgc2xlcF9lZGdlMTFgOiAxLiBJJ3ZlIGNsZWFybHkgc2VlbiBwZW9wbGUgaW4gbXkgcm9vbQotIGBzbGVwX2VkZ2UxMmA6IDIuIEkndmUgaGVhcmQgbm9uLXNwZWVjaCBzb3VuZCwgc3VjaCBhcyBsYXVnaHRlciwgbXVzaWMgb3Igb3RoZXIgbm9pc2VzCi0gYHNsZXBfZWRnZTEzYDogMy4gSSd2ZSBzZWVuIHRoaW5ncyBpbiBteSByb29tIG90aGVyIHRoYW4gcGVvcGxlCi0gYHNsZXBfZWRnZTE0YDogNC4gSSd2ZSBoYWQgdGhlIGZlZWxpbmcgb2YgYSBwcmVzZW5jZSBpbiB0aGUgcm9vbSB3aGljaCBJIGZlbHQgd2FzIGF3YXJlIG9mIG1lIHRvbywgYnV0IEkgY291bGQgbm90IGFjdHVhbGx5IHNlZSwgaGVhciwgdG91Y2ggb3Igc21lbGwgdGhlbQotIGBzbGVwX2VkZ2UxNWA6IDUuIEkndmUgaGVhcmQgR29kIChvciBhIHNwaXJpdCkgc3BlYWsKLSBgc2xlcF9lZGdlMTZgOiA2LiBJJ3ZlIGhlYXJkIEdvZCAob3IgYSBzcGlyaXQpIHNpbmdpbmcgdG8gbWUuCi0gYHNsZXBfZWRnZTE3YDogNy4gSSd2ZSBzZWVuIGFuIGFuZ2VsIChvciBhIHNwaXJpdCkKLSBgc2xlcF9lZGdlMThgOiA4LiBJJ3ZlIHNlZW4gYSBnaG9zdAotIGBzbGVwX2VkZ2UxOWA6IDkuIEkndmUgZmVsdCB0aGUgcHJlc2VuY2Ugb2YgR29kIChvciBhIHNwaXJpdCkKLSBgc2xlcF9lZGdlMjBgOiAxMC4gSSBoYXZlIHdva2VuIHVwIGFuZCBiZWVuIHVuYWJsZSB0byBtb3ZlLgoKYGBge3J9CmVkZ2Vfa2V5IDwtIHJlYWRfZXhjZWwoIi4vZWRnZV9rZXkueGxzeCIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGluY2x1ZGUgPSBUfQpkICU+JQogIHNlbGVjdChzbGVwX3N1YmosIHNsZXBfY3RyeSwgY29udGFpbnMoImVkZ2UiKSwgLWNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIGNvbnRhaW5zKCJlZGdlIikpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGZhY3RvcihyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygibmV2ZXIiLCAicmFyZWx5IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9jY2FzaW9uYWxseSIsICJmcmVxdWVudGx5IikpKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHJlc3BvbnNlKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2xlcF9jdHJ5LCB5ID0gcmVzcG9uc2UsIGNvbG9yID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X3dyYXAofiBxdWVzdGlvbiwgbmNvbCA9IDcpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMDUsIHdpZHRoID0gMC4yNSwgaGVpZ2h0ID0gMC4yNSkgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkoc2xlcF9jdHJ5LCBxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgICAgICAgbXV0YXRlKHJlc3BvbnNlID0gYXMubnVtZXJpYyhyZXNwb25zZSkpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInJlc3BvbnNlIikgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSAwLjUpICsKICBnZW9tX3RleHQoZGF0YSA9IGVkZ2Vfa2V5LCAKICAgICAgICAgICAgYWVzKHggPSBOVUxMLCB5ID0gTlVMTCwgY29sb3IgPSBOVUxMLAogICAgICAgICAgICAgICAgbGFiZWwgPSBzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCB3aWR0aCA9IDI5KSksCiAgICAgICAgICAgIHggPSAwLjc1LCB5ID0gNS41LCBjb2xvciA9ICJibGFjayIsIAogICAgICAgICAgICBoanVzdCA9IDAsIHZqdXN0ID0gMSwgc2l6ZSA9IDIuNSwgbGluZWhlaWdodCA9IDAuOCkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2Rpc2NyZXRlKGV4cGFuZCA9IGV4cGFuZF9zY2FsZShhZGQgPSBjKDAuNiwgMS43NSkpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA2MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJSZXNwb25zZXMgdG8gJ2VkZ2UnIHF1ZXN0aW9ucyAoYHNsZXBfZWRnZTAxYC1gc2xlcF9lZGdlMjBgKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiUmVzcG9uc2UiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgc2VsZWN0KHNsZXBfc3Viaiwgc2xlcF9jdHJ5LCBjb250YWlucygiZWRnZSIpLCAtY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgY29udGFpbnMoImVkZ2UiKSkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlID0gZmFjdG9yKHJlc3BvbnNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJuZXZlciIsICJyYXJlbHkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2NjYXNpb25hbGx5IiwgImZyZXF1ZW50bHkiKSkpICU+JQogIGdncGxvdChhZXMoeCA9IHJlc3BvbnNlLCBmaWxsID0gc2xlcF9jdHJ5KSkgKwogIGZhY2V0X2dyaWQoY29scyA9IHZhcnMoc2xlcF9jdHJ5KSwgcm93cyA9IHZhcnMocXVlc3Rpb24pKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJjb3VudCIpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbnMgb2YgcmVzcG9uc2VzIHRvICdlZGdlJyBxdWVzdGlvbnMgKGBzbGVwX2VkZ2UwMWAtYHNsZXBfZWRnZTIwYCkiLAogICAgICAgeCA9ICJSZXNwb25zZSIsIHkgPSAiUHJvcG9ydGlvbiBvZiBwYXJ0aWNpcGFudHMiKQpgYGAKCgo=